package main

import "fmt"

// 值传递，因此函数内部的修改不会影响到main函数中的base
func getFunc(base int) (func(int), func(int)) {
	fmt.Printf("base地址 %p\n", &base)
	add := func(num int) {
		base += num
	}
	minus := func(num int) {
		base -= num
	}
	return add, minus
}

// 指针传递，因此函数内部的修改会影响到main函数中的base
func getFuncPoint(base *int) (func(int), func(int)) {
	fmt.Printf("base地址 %p\n", base)
	add := func(num int) {
		*base += num
	}
	minus := func(num int) {
		*base -= num
	}
	return add, minus
}

func main() {
	base := 10
	fmt.Printf("base地址 %p\n", &base)
	fmt.Println(base)
	//add, minus := getFunc(base)
	add, minus := getFuncPoint(&base)
	add(20)
	fmt.Println(base)
	minus(10)
	fmt.Println(base)
}
